<?php
/**
 * Плагин локализации приложения
 * @since 2.0.1
 * @author Andrew
 */
class Nimblecms_Controller_Plugin_LocalizationRoute extends Zend_Controller_Plugin_Abstract {
    
    public function routeStartup(Zend_Controller_Request_Abstract $request) {
        //получаем языки
        $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
        $locales = $bootstrap->getOption('locales');
        //язык по-умолчанию (первый в списке)
        $defaultLang = key($locales);
        
        $langNamespace = new Zend_Session_Namespace('site');
        if(isset($langNamespace->lang)) {
            $defaultLang = $langNamespace->lang;
        }
        
        //текущий uri
        $currentUri = $request->getRequestUri();
        $currentUri = rtrim($currentUri, '/');
         
        if (strpos(strtolower($currentUri) . '/', '/admin/') === false) {
            //если мы во front-end
            $paths = explode('/', ltrim($request->getPathInfo(), '/'));
            $defaultLang = array_shift($paths);
            
        } else {
            $paths = explode('/', rtrim($request->getPathInfo(), '/'));
            $defaultLang = array_pop($paths);
        }
        //добавляем параметр lang
        if(in_array($defaultLang, array_keys($locales))) {
            $request->setParam('lang', $defaultLang);
            $path = implode('/', $paths);
            if('' == $path) {
                $path = '/';
            }
            $request->setPathInfo($path);
        } else {
            
            /*
             * Сессию больше не используем для хранения языка
             */
            if(isset($langNamespace->lang)) {
                $defaultLang = $langNamespace->lang;
            } else {
                $defaultLang = key($locales);
            }
            //$defaultLang = key($locales);
            $request->setParam('lang', $defaultLang);
        }
        
        /*$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
        if (null === $viewRenderer->view) {
                $viewRenderer->initView();
        }
        $view = $viewRenderer->view;

        $view->LANG = $defaultLang;*/

        $locale = new Zend_Locale($locales[$defaultLang]);
        Zend_Locale::setDefault($locale);
        
        
        $bootstrap->bootstrap('Translate');
        $translate = $bootstrap->getResource('Translate');

        $translate->setLocale($locale);
        
        $bootstrap->bootstrapView();
        $view = $bootstrap->getResource('view');
        
        $view->LANG = $defaultLang;
        
        $translator = new Zend_Translate(
                'array',
                realpath(APPLICATION_PATH . '/../data/languages'),
                $locale,
                array(
                    'scan' => Zend_Translate::LOCALE_DIRECTORY,
                    'disableNotices' => true,
                    'logUntranslated' => false,
                )
        );
        //Zend_Debug::dump($translator->getAdapter());
        Zend_Validate::setDefaultTranslator($translator);
        
        
        //$langNamespace->lang = $defaultLang;
        
        //Zend_Debug::dump($locales[$defaultLang]);
        
        
    }
    
}
